package algoWing42.modelo;

public class TorpedoAdaptable extends Disparo {
    
	/**
	 * 
	 */
	private static final long serialVersionUID = 2259808304205719951L;
	private int direcciony;
    private int contadorMovimiento;
    
    public static final int RADIO_TORPEDO_ADAPTABLE = 10;
    public static final int DANIO_TORPEDO_ADAPTABLE = 8;
    public static final int VELOCIDAD_VERTICAL_TORPEDO_ADAPTABLE = 2;
    public static final int VELOCIDAD_HORIZONTAL_TORPEDO_ADAPTABLE = -1;
    public static final int CANTIDAD_MOVIMIENTOS_HORIZONTALES = 5;

    public TorpedoAdaptable(int x, int y, boolean disparadoPorJugador) {
        super(x, y, RADIO_TORPEDO_ADAPTABLE, disparadoPorJugador);
        inicializarTorpedoAdaptable(disparadoPorJugador);
    }

    public TorpedoAdaptable(Punto posicion, boolean disparadoPorJugador) {
        super(posicion.getX(), posicion.getY(), RADIO_TORPEDO_ADAPTABLE, disparadoPorJugador);
        inicializarTorpedoAdaptable(disparadoPorJugador);
    }
    
    private void inicializarTorpedoAdaptable(boolean fueDisparadoPorJugador) {
    	this.danio = DANIO_TORPEDO_ADAPTABLE;

        if (fueDisparadoPorJugador) {
            direcciony = -1;
        } else {
            direcciony = 1;
        }
        contadorMovimiento = 1;
    }
    
    public void colisionConJugador(AvionJugador jugador) {
    	jugador.colisionConTorpedoAdaptable(this);
    	this.destruir();
    }

    /**
     * Se mueve 4 lugares hacia la izquierda y luego avanza al doble 
     * de velocidad hacia arriba o abajo si es del jugador o del 
     * enemigo, respectivamente"
     */
    @Override
    protected void mover() {
        if (contadorMovimiento <= CANTIDAD_MOVIMIENTOS_HORIZONTALES) {
            this.moverEnDireccion(VELOCIDAD_HORIZONTAL_TORPEDO_ADAPTABLE, 0);
        }

        if (contadorMovimiento > CANTIDAD_MOVIMIENTOS_HORIZONTALES) {
            this.moverEnDireccion(0, VELOCIDAD_VERTICAL_TORPEDO_ADAPTABLE * direcciony);
        }

        this.contadorMovimiento = this.contadorMovimiento + 1;
    }
}
